package top.igotcha.mapreduce.sort;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * @time 2021/1/10
 * @auth Gotcha
 * @describe
 * Reducer的泛型
 *  KEYIN:k2的类型     可以进行比较及排序的Bean对象    SortWritable
 *  VALUEIN:v2的类型   一行的文本数据                Text
 *  KEYOUT:k3的类型    可以进行比较及排序的Bean对象    SortWritable
 *  VALUEOUT:v3的类型  空类型，占位符                NullWritable
 */
public class SortReducer extends Reducer<SortWritable,Text,SortWritable, NullWritable> {
    //自定义计数器，使用枚举类
    public static enum Counter{
        REDUCE_INPUT_KEY_RECORDS, REDUCE_INPUT_VAL_NUMS,
    }
    /**
     * @describe 是将k2,v2转换为k3,v3
     * @param key 表示k2
     * @param values 表示集合
     * @param context 表示MapReduce上下文对象
     */
    @Override
    protected void reduce(SortWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        //统计Reduce阶段key个数
        context.getCounter(Counter.REDUCE_INPUT_KEY_RECORDS).increment(1L);
        for (Text value : values) {
            //统计Reduce阶段value个数
            context.getCounter(Counter.REDUCE_INPUT_VAL_NUMS).increment(1L);
            context.write(key,NullWritable.get());
        }
    }
}
